<?php
// +----------------------------------------------------------------------
// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2018 http://www.thinkcmf.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: 現在 <244100330@qq.com>
// +----------------------------------------------------------------------
namespace plugins\modules;
use cmf\lib\Plugin;
use think\db;

/** **************************************************************************************************************************

使用须知：
** 使用时需明白的几个概念：
** 1、先建立一个模块：
**     可选择自带的4张示例文章模型，
**     每个模块可以添加无限张表，
**     每张表用表名规则绑定一起，
**     一个模块必须有一张主表，
**     表之间的关联关系：不关联(0)、一对一(1)、一对多(2)

** 2、内容模型之表管理：
**    可以对表做跟数据库类似的基本简单操作，添加删除修改字段等。
**    也仅仅只是对表的管理，跟其它无关。

** 3、内容模型之字段操作配置：
**    根据建立好的字段，配置后台的显示列表、搜索from控件、编辑控件等操作。
**    其中编辑控件部分需要配置，如，有复选框值配置格式：0:隐藏,1:正常,2:推荐

** 4、以上步骤配置好后:
**   会在某个菜单下生成一个为模块名的新菜单，
**   现定（内容管理）菜单下，此菜单可随意移植到其它地方，如未生成，请清空缓存后再试。
**   配置表单有默认60秒的缓存，配置后检查不生效时记得“清空缓存”。
  
** 插件表说明：
**     核心表：
**         模块-列表：cmf_plugin_modules
**         模块内部表-列表:cmf_plugin_modules_tables
**     资源表:
**         城市表:cmf_plugin_modules_citys 用于Form控件选择城市
**     内容表：
**         该表由模块内生成或新建，无法确定表名。但都有一个统一的规则，如：cmf_item_{模块的拼音}_{表的拼音}，其中cmf_item_{模块的拼音}为模块的主表

===============================================================================================================================

自定义后台表单(仅后台使用)： 内容管理，表管理，表字段配置，灵活的自定义字段配置列表显示搜索控件编辑控件等。

如果插件有不满足需求的控件，可以自己扩展4个Form类里的方法来实现(ControlForm/EditForm/ListForm/SearchForm)。

如果项目需求与插件有小部分的不满足，可以通过: 新建控制器-继承插件控制器-重构方法，来实现您的特殊需求。

===========前端调用说明：

<br/><br/>---单个调用示例---<br/><br/>    

<php>
	//$data  = (new plugins\modules\model\ContentModel())->getList($modules_id, $level=0, $where=[], $cache=0);    //换成自己的参数
</php>

<br/><br/>---多个个调用示例---<br/><br/>

<php>
	//$datas = (new plugins\modules\model\ContentModel())->getLists($modules_id, $level=0, $where=[], $page=1, $limit=1, $cache=0);    //换成自己的参数
</php>

参数说明：

modules_id(模块拼音或者ID)，

level（查询的关联级别：0表示只查主表，1表示查主表和一对一关联的所有表数据，2（默认）查所有模块表数据）

where (查询条件，数组形式,跨表查询时，字段需要带上表名或表拼音)

page/limit 分页/页条数

cache  缓存列表过期值，单位秒，默认不缓存。

说明： 标签调用兼容性不好，这样直接调用虽然丑了点，但兼容性好些，更直观。

** **************************************************************************************************************************/

class ModulesPlugin extends Plugin
{

    public $info = [
        'name'        => 'Modules',
        'title'       => '内容模型',
        'description' => '内容模型',
        'status'      => 1,
        'author'      => 'LI',
        'version'     => '1.4',
        'demo_url'    => 'http://demo.thinkcmf.com',
        'author_url'  => 'http://www.thinkcmf.com'
    ];

    public $hasAdmin = 1;//插件是否有后台管理界面

    // 插件安装
    public function install()
    {
        $prefix  = config('database.prefix');
        $charset = config('database.charset');
        $sqlArr  = cmf_split_sql($this->getPluginPath(). '/data/modules.sql', $prefix, $charset);
        foreach($sqlArr as $sql){
            db::execute($sql);
        }
        return true;//安装成功返回true，失败false
    }

    // 插件卸载
    public function uninstall()
    {
        $prefix = config('database.prefix');

        $sql = "DROP TABLE IF EXISTS `{$prefix}plugin_modules`;";
        db::execute($sql);
        $sql = "DROP TABLE IF EXISTS `{$prefix}plugin_modules_tables`; ";
        db::execute($sql);
        $sql = "DROP TABLE IF EXISTS `{$prefix}plugin_modules_citys`; ";
        db::execute($sql);
        $sql = "DROP TABLE IF EXISTS `{$prefix}plugin_modules_column`; ";
        db::execute($sql);
        return true;//卸载成功返回true，失败false
    }


}